package elems;

import common.ParseException;

import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class DynamicText extends ClassElem {
    private ArrayList<String> texts;
    private ArrayList<String> values;
    private String comment;

    public DynamicText(Clazz clazz, ArrayList<String> texts, ArrayList<String> values, String comment) {
        super(clazz);
        this.texts = texts;
        this.values = values;
        this.comment = comment;
    }

    @Override
    public void print(int shift) {
        String str = "~d{";
        for(int i=0;i<texts.size();i++){
            str+=texts.get(i);
            if(values.size()>i)
                str+="} "+values.get(i)+" {";
        }
        str+="} /* [DYNAMIC TEXT] "+comment + " */";
        System.out.println(str);
    }

    public static boolean is(Clazz parent, int lineNum, String text) throws ParseException {
        text = text.trim();
        if (text.length() == 0)
            return false;

        if (text.toLowerCase().startsWith("~d{") || text.toLowerCase().startsWith("~s{")) {
            if (text.endsWith("}"))
                return true;
            else
                throw new ParseException("Строка начинается с '~d{' или '~s{' но не заканчивается '}' (Строка " + lineNum + ")");
        }

        Pattern pattern = Pattern.compile("^[A-Za-z0-9_-]+ *:");
        Matcher matcher = pattern.matcher(text);
        return matcher.find();
    }

    public static DynamicText get(Clazz parent, int lineNum, String text) throws ParseException {
        if(!is(parent,lineNum,text))
            return null;
        text=text.trim();
        ArrayList<String> texts=new ArrayList<String>();
        ArrayList<String> values=new ArrayList<String>();
        if(text.toLowerCase().startsWith("~s{")){
            texts.add(text.substring(3,text.length()-1));
            return new DynamicText(parent,texts,values,"");
        }
        if(text.toLowerCase().startsWith("~d{")){
            text=text.substring(2);
            String tStr="";
            for(int i=0;i<text.length();i++)

            return new DynamicText(parent,texts,values,"");
        }
        return null;
    }
}
